1 MySQL日志
1.1 錯(cuò)誤日志
文件名:可用–log-error[=file_name]指定,否則默認(rèn)使用hostname.err
內(nèi)容:記錄mysqld啟動(dòng)和停止時(shí),以及服務(wù)器發(fā)生任何嚴(yán)重錯(cuò)誤時(shí)記錄相關(guān)信息
1.2 二進(jìn)制日志
文件名:也是binlog(邏輯日志),可用–log-bin[=file_name] 指定,默認(rèn)為主機(jī)名
內(nèi)容:包含了所有更新了或者潛在更新了數(shù)據(jù)的所有語(yǔ)句,語(yǔ)句以“事件”的形式保存,描述數(shù)據(jù)更改文件位置和格式
查看日志:
mysqlbinlog log-file
刪除日志:
#刪除所有的binlog日志,新日志從頭開(kāi)始編號(hào)
RESET MASTER
#刪除mysql-bin.010之前的所有日志
PURGE MASTER LOGS TO 'mysql-bin.010'
#刪除2022.5.1之前的binlog日志
purge master logs before '2022-05-01 08:00:00';
1.3 查詢(xún)?nèi)罩?/h4>
文件名:使用–log指定,默認(rèn)hostname.log
內(nèi)容:記錄客戶(hù)端所有查詢(xún)語(yǔ)句記錄,在二進(jìn)制日志不存在查詢(xún)語(yǔ)句記錄
1.4 慢查詢(xún)?nèi)罩?/h4>
文件名:使用–log-slow-querie指定,默認(rèn)*-slow.log,寫(xiě)入data目錄
內(nèi)容:記錄執(zhí)行時(shí)間超過(guò)long_query_time秒的SQL查詢(xún)?nèi)罩疚募?/p>
其它選項(xiàng):–log_slow_admin_statements:表示將慢管理語(yǔ)句,如OPTIMIZE TABLE、ANALYZE TABLE和ALTER TABLE寫(xiě)入慢查詢(xún)語(yǔ)句
1.5 通用查詢(xún)?nèi)罩?/h4>
查看:show variables like '%general_log%';
執(zhí)行SQL命令 set global general_log=on;
開(kāi)啟
文件:默認(rèn)存放在data目錄下hostname.log文件
內(nèi)容:記錄客戶(hù)端的所有查詢(xún)行為
1.6 中繼日志
文件:默認(rèn)文件名hostnamet-relay-bin,存放在data目錄下
功能:從服務(wù)器I/O線(xiàn)程將主服務(wù)器的二進(jìn)制日志讀取過(guò)來(lái)記錄到從服務(wù)器本地文件,然后從服務(wù)器SQL線(xiàn)程會(huì)讀取relay-log日志的內(nèi)容并應(yīng)用到從服務(wù)器,從而使從服務(wù)器和主服務(wù)器的數(shù)據(jù)保持一致
參數(shù):show variables like '%relay%';
- max_relay_log_size
- relay log 允許的最大值,如果該值為0,則默認(rèn)值為 max_binlog_size (1G)
- 如果不為0,則 max_relay_log_size 則為最大的relay_log文件大小
- relay_log
- 定義 relay_log 的位置和名稱(chēng),如果值為空,則默認(rèn)位置在數(shù)據(jù)文件的目錄
- relay_log_index
- 定義 relay_log 索引的位置和名稱(chēng),記錄有幾個(gè) relay_log 文件,默認(rèn)為2個(gè)
- relay_log_info_file
- 定義 relay-log.info 的位置和名稱(chēng),relay-log.info 記錄 master 主庫(kù)的 binary_log 的恢復(fù)位置和 從庫(kù) relay_log 的位置
- relay_log_purge
- 是否自動(dòng)清空中繼日志,默認(rèn)值為1(啟用)
- relay_log_recovery
- 當(dāng)slave從庫(kù)宕機(jī)后,假如relay-log損壞了,導(dǎo)致一部分中繼日志沒(méi)有處理,則自動(dòng)放棄所有未執(zhí)行的relay-log,并且重新從master上獲取日志,這樣就保證了relay-log的完整性。默認(rèn)情況下該功能是關(guān)閉的,將relay_log_recovery的值設(shè)置為 1時(shí),可在slave從庫(kù)上開(kāi)啟該功能,建議開(kāi)啟
- sync_relay_log
- 當(dāng)設(shè)置為1時(shí),slave的I/O線(xiàn)程每次接收到master發(fā)送過(guò)來(lái)的binlog日志都要寫(xiě)入系統(tǒng)緩沖區(qū),然后刷入relay log中繼日志里,這樣是最安全的,因?yàn)樵诒罎⒌臅r(shí)候,你最多會(huì)丟失一個(gè)事務(wù),但會(huì)造成磁盤(pán)的大量I/O
- 當(dāng)設(shè)置為0時(shí),并不是馬上就刷入中繼日志里,而是由操作系統(tǒng)決定何時(shí)來(lái)寫(xiě)入,雖然安全性降低了,但減少了大量的磁盤(pán)I/O操作。這個(gè)值默認(rèn)是0,可動(dòng)態(tài)修改
- sync_relay_log_info
- 這個(gè)參數(shù)和 sync_relay_log 參數(shù)一樣
1.7 審計(jì)日志
內(nèi)容:企業(yè)版自帶功能,社區(qū)版需使用audit審計(jì)插件完成數(shù)據(jù)庫(kù)審計(jì)工作
開(kāi)啟步驟:
-
下載插件:https://github.com/mcafee/mysql-audit
-
查看插件功能是否開(kāi)啟:
show variables like "%audit%";
-
開(kāi)啟插件功能:
set global audit_json_file=1;
注意,使用此方法開(kāi)啟對(duì)global全局變量的設(shè)置僅對(duì)于新開(kāi)啟的會(huì)話(huà)才是有效的,對(duì)已經(jīng)開(kāi)啟的會(huì)話(huà)不生效,參數(shù)最終需持久化到my.cnf配置文件中
-
開(kāi)啟后,在MySQL數(shù)據(jù)目錄下會(huì)多出一個(gè)mysql-audit.json審計(jì)日志
2 InnoDB日志
2.1 重做日志 (Redo Log)
文件:默認(rèn)情況下,對(duì)應(yīng)的物理文件位于數(shù)據(jù)庫(kù)的data目錄下的ib_logfile1&ib_logfile2
內(nèi)容:物理日志,記錄物理數(shù)據(jù)頁(yè)面的修改信息,redo log順序?qū)懭雛edo log file物理文件中
重做日志有一個(gè)緩沖區(qū)Innodb_log_buffer,InnoDB優(yōu)先將重做日志寫(xiě)入緩沖區(qū),日志寫(xiě)盤(pán)通常有三種方式:
-
Master Thread 每秒一次執(zhí)行刷新Innodb_log_buffer到重做日志文件
-
每個(gè)事務(wù)提交時(shí)會(huì)將重做日志刷新到重做日志文件。
-
當(dāng)重做日志緩存可用空間 少于一半時(shí),重做日志緩存被刷新到重做日志文件
因此,重做日志的寫(xiě)盤(pán),并不一定是隨著事務(wù)的提交才寫(xiě)入重做日志文件的,而是隨著事務(wù)的開(kāi)始逐步開(kāi)始的,這可以很好地解釋再大的事務(wù)的提交(commit)的時(shí)間也是很短暫的
事務(wù)產(chǎn)生的重做日志,通過(guò)innodb_flush_log_at_trx_commit參數(shù)控制:
- 設(shè)置為 0 的時(shí)候,表示不寫(xiě)入buffer,直接每秒寫(xiě)入到redo file中,但mysql 崩潰會(huì)丟失1s數(shù)據(jù)
- 設(shè)置為 1 的時(shí)候,表示每次事務(wù)提交時(shí)都將 redo log 直接持久化到磁盤(pán)
- 設(shè)置為 2 的時(shí)候,表示每次事務(wù)提交時(shí)都只是把 redo log 寫(xiě)到 page cache,由OS處理回寫(xiě)磁盤(pán)操作,OS宕機(jī)會(huì)丟失數(shù)據(jù)
2.2 回滾日志(Undo Log)
文件:邏輯日志,記錄在表空間中
-
MySQL5.6之前,undo表空間位于共享表空間的回滾段中,共享表空間的默認(rèn)的名稱(chēng)是ibdata,位于數(shù)據(jù)文件目錄中
-
MySQL5.6之后,undo表空間可以配置成獨(dú)立的文件,但是提前需要在配置文件中配置,完成數(shù)據(jù)庫(kù)初始化后生效且不可改變undo log文件的個(gè)數(shù)
內(nèi)容:記錄數(shù)據(jù)的邏輯變化,一條INSERT會(huì)對(duì)應(yīng)一條DELETE的undo log,發(fā)生錯(cuò)誤時(shí)能夠恢復(fù)到事務(wù)之前的數(shù)據(jù)狀態(tài)
undo log是MVCC(多版本并發(fā)控制)實(shí)現(xiàn)的關(guān)鍵